#include "GPIO.h"
#include "Delay.h"
#include "UART.h"
#include "NVIC.h"
#include "Switch.h"
#include "Timer.h"

#define LED1 P27 
#define LED2 P26 
#define LED3 P15 
#define LED4 P14 
#define LED5 P23 
#define LED6 P22 
#define LED7 P21 
#define LED8 P20 


void GPIO_Config(){
	
	GPIO_InitTypeDef init;
	init.Mode = GPIO_OUT_PP;		//IOģʽ,  		GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
	init.Pin = GPIO_Pin_5;	
	GPIO_Inilize(GPIO_P4,&init);
	
	init.Mode = GPIO_OUT_PP;		//IOģʽ,  		GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
	init.Pin = GPIO_Pin_4 | GPIO_Pin_5;	
	GPIO_Inilize(GPIO_P1,&init);
	
	init.Mode = GPIO_OUT_PP;		//IOģʽ,  		GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
	init.Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_6 | GPIO_Pin_7;	
	GPIO_Inilize(GPIO_P2,&init);
	
	init.Mode = GPIO_PullUp;		//IOģʽ,  		GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
	init.Pin = GPIO_Pin_0 | GPIO_Pin_1;	
	GPIO_Inilize(GPIO_P3,&init);
}


void UART_Config(){
	COMx_InitDefine init;
	
    init.UART_Mode = UART_8bit_BRTx;			//模式,         UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
	init.UART_BRT_Use = BRT_Timer1;		//使用波特率,   BRT_Timer1,BRT_Timer2,BRT_Timer3,BRT_Timer4
	init.UART_BaudRate = 115200;		//波特率, 	   一般 110 ~ 115200
	init.UART_RxEnable = ENABLE;		//允许接收,   ENABLE,DISABLE
	init.BaudRateDouble = DISABLE;		//波特率加倍, ENABLE,DISABLE
	
    UART_Configuration(UART1,&init);
	
	NVIC_UART1_Init(ENABLE,Priority_2);
	
	UART1_SW(UART1_SW_P30_P31);

}


void Timer_Config(){
	TIM_InitTypeDef init;
	init.TIM_Mode = TIM_16BitAutoReload;		//工作模式,  	TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
	init.TIM_ClkSource = TIM_CLOCK_1T;	//时钟源		TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
	init.TIM_ClkOut = DISABLE;		//可编程时钟输出,	ENABLE,DISABLE
	init.TIM_Value = 65536 - (MAIN_Fosc/1000);		//装载初值
	init.TIM_Run = ENABLE;		//是否运行		ENABLE,DISABLE
	
	Timer_Inilize(Timer0,&init);
	
	NVIC_Timer0_Init(ENABLE,Priority_1);
}

int i;
void Right_LED(){
	for(i = 8; i>=0;i--)
	{
		LED1 = i == 1? 0:1;
		LED2 = i == 2? 0:1;
		LED3 = i == 3? 0:1;
		LED4 = i == 4? 0:1;
		LED5 = i == 5? 0:1;
		LED6 = i == 6? 0:1;
		LED7 = i == 7? 0:1;
		LED8 = i == 8? 0:1;
		delay_ms(250);
	}
}

void Left_LED(){
	
	for(i = 1; i<=9;i++)
	{
		LED1 = i == 1? 0:1;
		LED2 = i == 2? 0:1;
		LED3 = i == 3? 0:1;
		LED4 = i == 4? 0:1;
		LED5 = i == 5? 0:1;
		LED6 = i == 6? 0:1;
		LED7 = i == 7? 0:1;
		LED8 = i == 8? 0:1;
		delay_ms(250);
	}
}
int count = 0;

void handle_Timer0_interrupt(){   //定时器控制串口的中断
	
	count++;
	
	if(count == 1){
		if(COM1.RX_Cnt > 0 && --COM1.RX_TimeOut == 0)
	{
		if(RX1_Buffer[0] == 0x00)
		{
			Right_LED();
		}else
		{
			Left_LED();
		}
		COM1.RX_Cnt = 0;
	}
		count = 0;
	}
}


int main(){
	P45 = 0;
	GPIO_Config();
	UART_Config();
	Timer_Config();
	EA = 1;
	handle_Timer0_interrupt();
	while(1);
}